﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;

using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Collections;
using System.IO;

namespace INSA
{
    public partial class FormMTargetAdd : Form
    {
        private string file_name;
        private Label lblNumOfTarget;
        private int targetType;
        private FormMain parent;
        

        public FormMTargetAdd()
        {
            InitializeComponent();
        }

        public FormMTargetAdd(FormMain parent, Label label, int targetType)
        {
            InitializeComponent();

            Control.CheckForIllegalCrossThreadCalls = false;

            this.lblNumOfTarget = label;
            this.targetType = targetType;
            this.parent = parent;

        }

        private void btnOpenXls_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog dlg = new OpenFileDialog();
                dlg.Filter = "모든 Microsoft Excel files (*.xls)|*.xls";
                dlg.Title = "다면평가대상자 엑셀 파일 열기";
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    file_name = dlg.FileName;
                    //엑셀 파일 열기
                    Thread t = new Thread(new ThreadStart(openXls));
                    t.Start();

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void openXls() {

            FileInfo fi = new FileInfo(file_name);         
            
            lblMessage.Text = fi.Name + " 여는 중...";

            Util.OSheet = Util.openXls(file_name);

            lblMessage.Text = fi.Name + " 읽는 중...";

            //엑셀 파일 읽기
            readXls();

            //대상자인원 환경변수에
            Config.NumOfTagets = DBUtil.getNumOfTagets(targetType);

            //대상자인원 레이블에 표시
            this.lblNumOfTarget.Text = Config.NumOfTagets.ToString();

            //엑셀 파일 닫기
            Util.closeXls();

            fi = null;
        }

        private void readXls()
        {
            //DB에서 다면평가대상자(TARGETS)의 기존 레코드 모두 삭제
            DBUtil.truncateTarget(targetType);

            //엑셀의 셀에서 읽은 값들을 2차원 배열로 넘겨받음
            object[,] arr = Util.readXlsMTarget();  
            int cnt = 0;
            bool chk = true;
            try
            {                
                 
                
                for (int i = 1; i <= arr.GetUpperBound(0); i++) //열
                {
                    //파일의 대상자유형과 선택한 대상자 유형이 일치하는 검사해서
                    //일치하지 않으면 Skip!
                    if (arr[i, 2] != null && targetType != Int32.Parse(arr[i, 2].ToString())) continue;

                    if (arr[i, 1] != null)
                    {

                        ArrayList list = new ArrayList();

                        for (int j = 1; j <= arr.GetUpperBound(1); j++) //행
                        {
                            if (arr[i, j] != null)
                            {
                                list.Add(arr[i, j]);
                            }
                            else
                            {
                                chk = false;
                                break;
                            }

                        }

                        if (chk == true)
                        {

                            DBUtil.insertMTargetInfo(list); //DB에 입력

                        }
                        else
                        {
                            MessageBox.Show("다면평가대상자 엑셀 파일을 읽는 중 오류: 빈 값이 있습니다.   ", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            break;
                        }

                    }
                    else
                    {
                        break;
                    }

                    cnt++;
                   
                }

                lblMessage.Text = "다면평가대상자(" + cnt + "명) 등록 완료!";

                
            }
            catch (Exception ex)
            {
                MessageBox.Show( ex.Message + "\n\n" + ex.StackTrace, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
